package recursion;

/**
 * @author czt
 * @version 1.0
 * @since 2024/12/16
 *
 * 杨辉三角
 */
public class PascalTriangle {

    public static void main(String[] args) {
        print(5);
    }

    /**
     * 求杨辉三角元素值
     * @param i 代表元素行 从0开始
     * @param j 代表元素列 从0开始
     * @return 元素值
     */
    public static int pascalTriangle(int i, int j) {
        // 当 j为0或i=j时，取值为1
        if (j == 0 || i == j) {
            return 1;
        }
        /*
        1
        1   1
        1   2   1
        1   3   3   1
        1   4   6   4   1
         */
        return pascalTriangle(i - 1, j - 1) + pascalTriangle(i - 1, j);
    }

    /**
     * 打印杨辉三角
     * @param n 三角的高度
     */
    public static void print(int n) {
        for (int i = 0; i < n; i++) {
            // 打印空格
            printSpace(n, i);
            for (int j = 0; j <= i; j++) {
                System.out.printf("%-4d",pascalTriangle(i, j));
            }
            System.out.println();
        }
    }

    /**
     * 打印空格
     * @param n 高度
     * @param i 行号
     */
    private static void printSpace(int n, int i) {
        // 计算打印的空格数量
        int spaceNum = (n - 1 - i) * 2;
        for (int j = 0; j < spaceNum; j++) {
            System.out.print(" ");
        }
    }
}
